/*
 * @description: 接口 
    当一个对象类型被多次使用时，一般会使用接口 interface 来描述对象的类型 ，达到复用的目的 
    解释： 
    使用 interface 关键词声明 
    接口名称 合法变量名称

 * @Date: 2022-12-06 12:01:53
 */

/** i定义接口 */
interface Iperson {
    name:string
    age:number
    sayHi():void
}

/** 类型别名 */
type Ipersons = {
    name:string
    age:number
    sayhi():void
}
let personal: Iperson={
    name:'kai',
    age:18,
    sayHi(){}
}

/** 
 * interface 和 type 的对比 
 * 相同点 ： 都可以给 对象指定类型
 * 不同点 ： 接口 只能为对象指定类型   类型别名，不仅可以为对象指定类型，实际上可以为任意类型指定别名
 */

/** 接口继承 
 *  如果两个接口之间有相同的属性或则方法,可以将公共的属性或则方法抽离出来，通过继承来实现复用
 *  比如 这两个接口 都 有 x y 两个属性，重复写两次，可以但是繁琐 
*/

interface Point2D { x:number ; y:number};
interface Point3D { x:number ; y:number; z:number} 

// 继承
interface Point2D { x:number ; y:number};
interface Point3D extends Point2D { z:number };